﻿using System;
using System.Data;
using System.Text.RegularExpressions;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DataInfo;
using KenLib.BusinessManager;
using System.Drawing;
using XBLib.Dal.AdoDal; 

public partial class Org_frmO_EmpCareerInput : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ((Org_MasterPage)this.Master).changeTitle("職種職務情報登録");
        ((Org_MasterPage)this.Master).HideLiArea("frmO_EmpCareerInput");

		if (Session["人コード"] == null)
		{
			Response.Redirect("../frmD_Login.aspx");
		}
		else if (Session["人コード"].ToString() == "")
		{
			Response.Redirect("../frmD_Login.aspx");
		}

		if (Request.UrlReferrer != null)
		{
			string PageRequest = Request.UrlReferrer.ToString();

			if (PageRequest.IndexOf("frmO_EmpDivisionInput.aspx") > 0 || PageRequest.IndexOf("frmO_EmpContactInput.aspx") > 0)
			{
				if (Session["社員ID"] == null)
					Response.Redirect("../frm_MainMenu.aspx");
				else if (Session["社員ID"].ToString() == "")
					Response.Redirect("../frm_MainMenu.aspx");

				Session["Action_frmO_EmpCareerInput"] = "insert";
			}
			if (PageRequest.IndexOf("frmO_EmpBasicInfo.aspx") > 0)
			{
				Session["Action_frmO_EmpCareerInput"] = "update";
				btn_次.Visible = false;
			}
		}
		else
		{
			if (Session["Action_frmO_EmpCareerInput"] != null && Session["Action_frmO_EmpCareerInput"].ToString() == "update")
				Response.Redirect("frmO_EmpBasicInfo.aspx");
		}

		try
		{
			string id = "";
			string id2 = "";

			if (Session["Action_frmO_EmpCareerInput"].ToString() == "update")
			{
				id = Request.QueryString["id"] != null ? Request.QueryString["id"] : "";
				ViewState["職種職務一覧_社員ID"] = Int32.Parse(id);

				id2 = Request.QueryString["id2"] != null ? Request.QueryString["id2"] : "";
				ViewState["職種職務一覧ID"] = id2 != "" ? Int32.Parse(id2) : 0;
			}
			else
			{
				ViewState["職種職務一覧_社員ID"] = Int32.Parse(Session["社員ID"].ToString());
			}
		}
		catch
		{
			Response.Redirect("frmO_EmpBasicInfo.aspx");
		}

        if (!IsPostBack)
        {
            bind職種コード();
            ddl_職種コード.Focus();

			int 社員ID = Int32.Parse(ViewState["職種職務一覧_社員ID"].ToString());
			LoadGrv職種職務一覧(社員ID);

            string ER00007 = GetError("ER00007");
            string ER00006 = GetError("ER00006");
			string ER00005 = GetError("ER00005");
            string ER00001 = GetError("ER00001");
            RequiredFieldValidator職種コード.ErrorMessage = ER00007;
            RequiredFieldValidator職務コード.ErrorMessage = ER00007;
            RequiredFieldValidator実際開始日.ErrorMessage = ER00001;
            CustomValidator実際開始日.ErrorMessage = ER00006;
			CustomValidator実際開始日1.ErrorMessage = ER00005;

			if (Session["Action_frmO_EmpCareerInput"].ToString() == "update")
				LoadInfo_Reset職種職務情報(社員ID);
        }
    }
    protected void btn_戻る_Click(object sender, EventArgs e)
    {
		if (btn_次.Visible == false)
			Response.Redirect("frmO_EmpBasicInfo.aspx?id=" + ViewState["職種職務一覧_社員ID"].ToString() + "#115");
		else
			Response.Redirect("frmO_EmpDivisionInput.aspx");
    }
    protected void btn_次_Click(object sender, EventArgs e)
    {
        Response.Redirect("frmO_EmpContactInput.aspx");
    }

    /// <summary>
    /// ham lay loi tu database
    /// </summary>
    /// <param name="errorid"></param>
    /// <returns></returns>
    public String GetError(string errorid)
    {
        string error = "";
        Error er = new Error();
        er.ErrorID = errorid;
        ErrorManager frm_error = new ErrorManager();
        DataTable dt = frm_error.getError(er);
        if (dt.Rows.Count > 0)
            error = dt.Rows[0][2].ToString();
        return error;
    }
    protected void btnリセット_Click(object sender, EventArgs e)
    {
		ViewState["RowID_Color"] = "";
		ResetForm();
    }
    protected void btn_登録_Click(object sender, EventArgs e)
    {
        SetValueForControl();
        bool isValidate = true;

        if (isValidate == true)
        {
            職種職務情報 obj = new 職種職務情報();
			obj.社員ID = Int32.Parse(ViewState["職種職務一覧_社員ID"].ToString());
            obj.廃止区分 = 0;
            obj.職種コード = Int32.Parse(ddl_職種コード.SelectedValue);
            obj.職種 = ddl_職種コード.SelectedItem.Text;
            obj.職務コード = Int32.Parse(ddl_職務コード.SelectedValue);
            obj.職務 = ddl_職務コード.SelectedItem.Text;
            obj.立場 = txt_立場.Text;
            obj.具体的業務内容 = txt_具体的業務内容.Text;
			obj.実際開始日 = DateTime.Parse(txt_実際開始日.Text);

            職種職務情報Manager frm = new 職種職務情報Manager();

			if (btn_登録.Text == "登録")
			{
				ViewState["RowID_Color"] = frm.Insert職種職務情報(obj);
				ViewState["Row_Class_Name"] = "insert";
			}
			else
			{
				int 職種職務情報ID = 0;

				if (ViewState["職種職務一覧_GrvID"] != null)
					職種職務情報ID = Int32.Parse(ViewState["職種職務一覧_GrvID"].ToString());
				else
					職種職務情報ID = Int32.Parse(ViewState["職種職務一覧ID"].ToString());

				ViewState["RowID_Color"] = 職種職務情報ID.ToString();
				ViewState["Row_Class_Name"] = "update";

				frm.UpdateInfo職種職務情報_FrmO_ByID(obj, 職種職務情報ID);
			}

			ViewState["職種職務一覧ID"] = ViewState["RowID_Color"];
			ResetForm();
			ViewState.Remove("職種職務一覧_GrvID");
			ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "regis", "startup();", true);
        }
    }
	protected void LoadInfo_Reset職種職務情報(int 社員ID)
	{
		職種職務情報Manager frm = new 職種職務情報Manager();
		int ID2 = Int32.Parse(ViewState["職種職務一覧ID"].ToString());
		if (ID2 != 0)
		{
			DataTable dt = frm.SelectInfo職種職務情報_ByID(ID2, 社員ID);
			if (dt.Rows.Count > 0)
			{
				ddl_職種コード.SelectedValue = dt.Rows[0]["職種コード"].ToString();

				int 職種コードID = Int32.Parse(ddl_職種コード.SelectedValue);
				ddl_職務コード.Enabled = true;
				bind職務コード(職種コードID);

				ddl_職務コード.SelectedValue = dt.Rows[0]["職務コード"].ToString();
				txt_立場.Text = dt.Rows[0]["立場"].ToString();
				txt_具体的業務内容.Text = dt.Rows[0]["具体的業務内容"].ToString();
				txt_実際開始日.Text = DateTime.Parse(dt.Rows[0]["実際開始日"].ToString()).ToString("yyyy/MM/dd");

				btn_登録.Text = "更新";
			}
			else
			{
				Response.Redirect("frmO_EmpList.aspx");
			}
		}
		else {
			btn_登録.Text = "登録";
			Label 職種コード = (Label)grv_職種職務一覧.Rows[0].FindControl("lbl_職種コード");
			if(職種コード == null)
				AppCode_Common.ShowEmtyGrid<職種職務情報>(grv_職種職務一覧, 3, "データがありません。", "");
		}
	}
	protected void ResetForm() 
	{
		int 社員ID = Int32.Parse(ViewState["職種職務一覧_社員ID"].ToString());
		if (Request.QueryString["id2"] != null)
		{
			LoadInfo_Reset職種職務情報(社員ID);
		}
		else
		{
			btn_登録.Text = "登録";
			ddl_職務コード.Enabled = false;
			ddl_職務コード.SelectedValue = "-1";
			ddl_職種コード.SelectedValue = "-1";
			txt_立場.Text = "";
			txt_具体的業務内容.Text = "";
			txt_実際開始日.Text = "";
		}

		LoadGrv職種職務一覧(社員ID);
	}

    /// <summary>
    /// load du lieu vao dropdownList 職種コード
    /// </summary>
    public void bind職種コード()
    {
        職種コードManager frm = new 職種コードManager();
        DataTable dt = frm.Select職種コード();
        ddl_職種コード.DataSource = dt;
        ddl_職種コード.DataTextField = "職種名";
        ddl_職種コード.DataValueField = "ID";
        ddl_職種コード.DataBind();

        ListItem 選択 = new ListItem("[選択]", "-1");
        ddl_職種コード.Items.Insert(0, 選択);

        ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "regis", "startup();", true);
    }

    /// <summary>
    /// load du lieu vao dropdownList 職務コード
    /// </summary>
    /// <param name="職種コードID"></param>
    public void bind職務コード(int 職種コードID)
    {
        職務コードManager frm = new 職務コードManager();
        DataTable dt = frm.Select職務コード(職種コードID);
        ddl_職務コード.DataSource = dt;
        ddl_職務コード.DataTextField = "職務名";
        ddl_職務コード.DataValueField = "ID";
        ddl_職務コード.DataBind();

        ListItem 選択 = new ListItem("[選択]", "-1");
        ddl_職務コード.Items.Insert(0, 選択);

        ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "regis", "startup();", true);
    }

    /// <summary>
    /// ham chuyen doi ki tu < >
    /// </summary>
    /// <param name="root"></param>
    /// <returns></returns>
    public static Control[] FlattenHierachy(Control root)
    {
        List<Control> list = new List<Control>();
        list.Add(root);
        if (root.HasControls())
        {
            foreach (Control control in root.Controls)
            {
                list.AddRange(FlattenHierachy(control));
            }
        }
        return list.ToArray();
    }
    protected void SetValueForControl()
    {
        Control[] allControls = FlattenHierachy(Page);
        foreach (Control control in allControls)
        {
            TextBox textBox = control as TextBox;
            if (textBox != null)
            {
                textBox.Text = textBox.Text.Replace("<", "&lt;");
                textBox.Text = textBox.Text.Replace(">", "&gt;");
            }
        }
    }
    protected void ddl_職種コード_SelectedIndexChanged(object sender, EventArgs e)
    {
        int 職種コードID = Int32.Parse(ddl_職種コード.SelectedValue);

        if (職種コードID != -1)
        {
            ddl_職務コード.Enabled = true;
            ddl_職務コード.Focus();
        }
        else
            ddl_職務コード.Enabled = false;

        bind職務コード(職種コードID);
		
		int 社員ID = Int32.Parse(ViewState["職種職務一覧_社員ID"].ToString());
		LoadGrv職種職務一覧(社員ID);
    }

	protected void LoadGrv職種職務一覧(int 社員ID)
	{
		職種職務情報Manager frm = new 職種職務情報Manager();
		DataTable dt = frm.SelectData職種職務情報(社員ID);
		if (dt.Rows.Count > 0)
		{
			grv_職種職務一覧.DataSource = dt;
			grv_職種職務一覧.DataBind();

			ViewState["CurrentTable"] = dt;
		}
		else
		{
			AppCode_Common.ShowEmtyGrid<職種職務情報>(grv_職種職務一覧, 3, "データがありません。", "");
		}
	}

	protected void grv_職種職務一覧_PreRender(object sender, EventArgs e)
	{
		if (ViewState["Row_Class_Name"] != null)
		{
			string class_name = ViewState["Row_Class_Name"].ToString();
			for (int i = 0; i < grv_職種職務一覧.Rows.Count; i++)
			{
				string grv_id = grv_職種職務一覧.DataKeys[i].Value.ToString();
				string compare_id = (string)ViewState["RowID_Color"];
				if (grv_id == compare_id)
				{
					grv_職種職務一覧.Rows[i].CssClass = class_name;
				}
			}
		}
	}

	protected void grv_職種職務一覧_RowCommand(object sender, GridViewCommandEventArgs e)
	{
		try
		{
			if (e.CommandName.Equals("LoadUpdate"))
			{
				int index = grv_職種職務一覧.Rows[Convert.ToInt32(e.CommandArgument)].DataItemIndex;
				DataTable dt = (DataTable)ViewState["CurrentTable"];

				ddl_職種コード.SelectedValue = dt.Rows[index]["職種コード"].ToString();

				int 職種コードID = Int32.Parse(ddl_職種コード.SelectedValue);
				ddl_職務コード.Enabled = true;
				bind職務コード(職種コードID);

				ddl_職務コード.SelectedValue = dt.Rows[index]["職務コード"].ToString();
				txt_立場.Text = dt.Rows[index]["立場"].ToString();
				txt_具体的業務内容.Text = dt.Rows[index]["具体的業務内容"].ToString();
				txt_実際開始日.Text = DateTime.Parse(dt.Rows[index]["実際開始日"].ToString()).ToString("yyyy/MM/dd");

				btn_登録.Text = "更新";

				ViewState["職種職務一覧_GrvID"] = dt.Rows[index]["ID"].ToString();
			}
		}
		catch (Exception ex)
		{
			Response.Write(ex.StackTrace);
		}

		ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "regis", "startup();", true);
	}

	protected void grv_職種職務一覧_SelectedIndexChanging(object sender, GridViewPageEventArgs e)
	{
		grv_職種職務一覧.PageIndex = e.NewPageIndex;
		int 社員ID = Int32.Parse(ViewState["職種職務一覧_社員ID"].ToString());
		LoadGrv職種職務一覧(社員ID);
		ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "regis", "startup();", true);
	}

	protected void grv_職種職務一覧_RowDataBound(object sender, GridViewRowEventArgs e)
	{
		if (e.Row.RowType == DataControlRowType.DataRow)
		{
			e.Row.Attributes.Add("onclick", "javascript:__doPostBack('ctl00$ContentPlaceHolder1$grv_職種職務一覧','LoadUpdate$" + e.Row.RowIndex + "')");
		}
	}

	/// <summary>
	/// Function: Xu ly hien thi chuoi dai len GridView
	/// </summary>
	public string MySubstring(object str, int len)
	{
		if (str == null || str.ToString() == "")
			return "";
		
		string[] arrStr = new string[12];
		string strNew = "";
		char[] splitter = { ' ' };
		string temp = str.ToString();

		if (checkUnicode(temp) == true && temp.Length > len)
		{
			temp = temp.Substring(0, len) + "...";
		}
		else if (checkUnicode(temp) == false && temp.Length > (len + 6))
		{
			arrStr = temp.ToString().Split(splitter);
			strNew = "";
			for (int k = 0; k < arrStr.Length; k++)
			{
				if (strNew.Length > (len + 6))
				{
					strNew = strNew.Substring(0, strNew.Length - 1) + "...";
					break;
				}
				strNew += arrStr[k] + " ";
			}
			temp = strNew;
		}

		return temp;
	}

	/// <summary>
	/// Function: Kiem tra chuoi dau vao co thuoc bang ma Unicode
	/// </summary>
	protected bool checkUnicode(string strText)
	{
		const double hannessThreshold = 0.25d;
		const char lowestHanCodepoint = '\u4E00';
		const char highestHanCodepoint = '\u9FFF';
		int hanCharacterCount = 0;
		foreach (char c in strText)
			if (lowestHanCodepoint <= c && c <= highestHanCodepoint)
				hanCharacterCount++;
		double hannessScore = (double)hanCharacterCount / strText.Length;
		if (hannessScore >= hannessThreshold)
			return true;
		else
			return false;
	}
}
